package pe.edu.upc.dew.serviciosmultiples.controller;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.springframework.validation.BindException;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.mvc.SimpleFormController;
import org.springframework.web.servlet.view.RedirectView;
import pe.edu.upc.dew.serviciosmultiples.exception.LoginException;
import pe.edu.upc.dew.serviciosmultiples.exception.ServiceException;
import pe.edu.upc.dew.serviciosmultiples.model.Usuario;
import pe.edu.upc.dew.serviciosmultiples.service.UsuarioService;
import pe.edu.upc.dew.serviciosmultiples.util.CalendarFormater;
import static pe.edu.upc.dew.serviciosmultiples.util.Constants.USUARIO_ACT;
import static pe.edu.upc.dew.serviciosmultiples.util.Constants.USUARIO_ADMINISTRADOR;
import static pe.edu.upc.dew.serviciosmultiples.util.Constants.USUARIO_CLIENTE;
import static pe.edu.upc.dew.serviciosmultiples.util.Constants.FECHA_ACT;
/**
 *
 * @author Mario
 */
public class SendLoginController extends SimpleFormController {

    protected final Log logger = LogFactory.getLog(getClass());
    private UsuarioService usuarioService;

    public UsuarioService getUsuarioService() {
        return usuarioService;
    }

    public void setUsuarioService(UsuarioService usuarioService) {
        this.usuarioService = usuarioService;
    }

     @Override
     public ModelAndView onSubmit(HttpServletRequest request, HttpServletResponse response,
                                  Object command, BindException errors) throws ServletException {
        ModelAndView modelAndView = null;
        Usuario usuarioForm = (Usuario)command;
        logger.info("usuario: " + usuarioForm.getUserName() + " password: " + usuarioForm.getUsuPassword());
        if (usuarioForm.getUsuPassword() == null) {
            modelAndView = new ModelAndView("error");
        }

        try {
            Usuario vo = usuarioService.validarUsuario(usuarioForm);
            //System.out.print("usuario :" + vo);
            logger.info("usuario :" + vo);
            HttpSession session = request.getSession();
            session.setAttribute(USUARIO_ACT, vo);
            String fechaActual = CalendarFormater.obtenerFecha();
            session.setAttribute(FECHA_ACT, fechaActual);

            String usuarioTipo = vo.getUsuTipo();

            if( usuarioTipo.equals(USUARIO_CLIENTE)) {
               // modelAndView = new ModelAndView("solicitudListCliente","now",fechaActual);
                modelAndView = new ModelAndView(new RedirectView("solicitudCliente.htm"));
            }
            if(usuarioTipo.equals(USUARIO_ADMINISTRADOR)) {
//                modelAndView = new ModelAndView("solicitudListAdmin","now",fechaActual);
                modelAndView = new ModelAndView(new RedirectView("solicitudAdmin.htm"));
            }

        } catch(LoginException e) {
            //System.err.println(e.toString());
            logger.error(e.toString());
            modelAndView = new ModelAndView("error");
        } catch(ServiceException ex) {
            //System.out.println(ex.toString());
            logger.info(ex.toString());
            //logger.deb
            modelAndView = new ModelAndView("error");
        } catch(Exception ex) {
            //System.err.println(ex.toString());
            logger.error(ex.toString());
            modelAndView = new ModelAndView("error");
        }
        return modelAndView;
  }

       //public ModelAndView handleRequest(HttpServletRequest req, HttpServletResponse res) throws Exception
   /* @Override
    public ModelAndView handleRequestInternal(HttpServletRequest request, HttpServletResponse response)
            throws Exception {
        ModelAndView modelAndView = null;
        String userName = request.getParameter("username");
        String userPassword = request.getParameter("password");
        logger.info("usuario: " + userName + " password: " + userPassword);
        if (userPassword == null) {
            modelAndView = new ModelAndView("error");
        }

        Usuario usuarioVo = new Usuario();
        usuarioVo.setUserName(userName);
        usuarioVo.setUsuPassword(userPassword);

        try {
            Usuario vo = usuarioService.validarUsuario(usuarioVo);
            HttpSession session = request.getSession();
            session.setAttribute("usuario_activo", vo);
            String fechaActual = CalendarFormater.obtenerFecha();
            modelAndView = new ModelAndView("misSolicitudes","now",fechaActual);
        } catch(LoginException e) {
            System.err.println(e.toString());
            modelAndView = new ModelAndView("error");
        } catch(ServiceException ex) {
            System.out.println(ex.toString());
            modelAndView = new ModelAndView("error");
        } catch(Exception ex) {
            System.err.println(ex.toString());
            modelAndView = new ModelAndView("error");
        }
        return modelAndView;
    }*/
}
